/**
 * 
 */
package server;

import java.text.Collator;
import java.util.Vector;

import server.db.DBServer;
import server.db.StopDBServer;
import server.file.FileServer;

/**
 * @author Julius Ollesch
 * 
 * @version 1.0 pierced' beagle
 */
public class Server extends Thread {
	private static boolean stop = false;

	/**
	 * Startet sowohl den Datenbank als auch den FileServer
	 * 
	 * @param args
	 * @see FileServer
	 * @see DBServer
	 */

	private static Vector<String> log = new Vector<String>();

	public static Object[] getLog() {
		return log.toArray();
	}

	public static void log(String message) {
		log.add(System.currentTimeMillis() + ": " + message);
	}

	public Server() {
		super();
	}

	public void command(String cmd) {
		if (Collator.getInstance().equals(cmd,
				Messages.getString("Server.Command.End"))) {
			synchronized (this) {
				stop = true;
				this.notifyAll();
			}
		}
	}

	@Override
	public void run() {
		synchronized (this) {// TODO Auto-generated method stub
			/**
			 * Neue Instanz des {@link DBServer} erstellen und in neuem Thread
			 * starten<<
			 */

			DBServer db = new DBServer();
			db.start();
			/**
			 * Neue Instanz des {@link FileServer} erstellen und in neuem Thread
			 * starten
			 */

			FileServer fs = new FileServer();
			fs.start();

			log.add((Messages.getString("Server.Message.Start")));//$NON-NLS-1$

			/**
			 * Server wartet bis Befehl zum beenden eingegeben wird und beendet
			 * dann
			 * 
			 */
			while (!stop) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					
					e.printStackTrace();
				}
			}
			/**
			 * Stopp-Signal {@link StopDBServer} senden
			 */
			StopDBServer wServer = new StopDBServer();
			/**
			 * File Server Stoppen
			 */
			fs.beenden();

			log.add((Messages.getString("Server.Message.End"))); //$NON-NLS-1$

			System.exit(0);
		}
	}

}
